In the cloud, computing resources often appear as a homogeneous pool. In reality, computing resources are a variety of different servers, computing, storage, networking and data center operations, all of which may be managed by the cloud provider. The cloud is typically device and location independent in that a user may not know the actual device or location where a component or resource physically resides. Components may access resources, such as processors or storage, without knowing the location of the resource. The provisioning of the computing resources, as well as load balancing among them, is the responsibility of the cloud service provider. This reliance on outsourced resources makes it difficult for companies deploying their applications to differentiate between issues with the cloud service provider and performance issues of their applications under high traffic/data scenarios. It also makes it challenging to stress test their applications under different scenarios.
Increasing amounts of data are stored in a distributed manner. While high traffic/data scenarios can be reproduced with hardware and simulations, testing using hardware requires a large amount of hardware infrastructure and is expensive. Current solutions require measuring run-time of each individual operation or line profiling which is slow and inefficient, particularly for large programs. In order to obtain meaningful data, companies have to use different independent tools, and integrate and process huge amounts of data to obtain a modicum of information the areas that are causing performance issues with their Application. It can also be difficult to discern whether an issue is with the cloud service or the Application. There is therefore a need for better performance testing solutions for cloud-based applications.